package main

import "fmt"

func Factorial1(n int) int {
	num := 1
	for i := 1; i < n+1; i++ {
		num *= i
	}
	return num
}

func Factorial2(n int) int {
	if n == 0 || n == 1 {
		return 1
	}
	return n * Factorial2(n-1)
}

func Factorial3(snum, n int) int {
	if n == 0 || n == 1 {
		return snum
	}
	snum *= n
	n -= 1
	return Factorial3(snum, n)
}

func main() {
	fmt.Println("序号：  循环写法：              递归写法：             循环改递归：")
	for i := 1; i <= 10; i++ {
		fmt.Printf("%-10d %-20d %-20d %-20d\n", i, Factorial1(i), Factorial2(i), Factorial3(1, i))
	}

}

// 批改意见
// 阶乘需要考虑n<0时的特殊情况